package genetica.mutacion;

import java.util.Random;

import genetica.cromosomas.Cromosoma;
import genetica.cromosomas.genes.Gen;
import genetica.cromosomas.genes.GenBool;

public class MutacionInserccion extends AlgoritmoMutacion {

	public MutacionInserccion(double pMutacion) {
		super(pMutacion);
	}

	@Override
	public void mutacion(Cromosoma original) {
		Random r = new Random();
		int nGenes = original.getGenes().size();
		for (int i = 0; i < original.getGenes().size();i++){
			System.out.println(""+pMutacion);
			if (r.nextDouble()< pMutacion) {
				int posDestino = r.nextInt(nGenes);
				Gen temp = original.getGenes().get(i);
				if (i < posDestino){
					
					for (int j = i; j< posDestino; j++){
						original.getGenes().set(j, original.getGenes().get(j+1));
					}
					
				}else{
					for (int j = i; j> posDestino; j--){
						original.getGenes().set(j, original.getGenes().get(j-1));
					}
				}
				original.getGenes().set(posDestino,temp);
			}
		}
	}

	@Override
	public String toString() {
		return "Mutación por inserción";
	}

}
